import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let textItems = [
    {
        "label": "Text_Create",
        "insertText": dedent`
        GUI:Text_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:fontSize}, \${6:fontColor}, \${7:str})
        `,
        "documentation": dedent`# 创建文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数      | 必选 | 类型   | 注释        |
        | :-------- | :--- | :----- | :---------- |
        | parent    | 是   | obj    | 父节点对象  |
        | ID        | 是   | string | 唯一ID      |
        | x         | 是   | int    | 位置 横坐标 |
        | y         | 是   | int    | 位置 纵坐标 |
        | fontSize  | 是   | int    | 字体大小    |
        | fontColor | 是   | string | 字体颜色    |
        | str       | 是   | string | 文本        |

        - 示例代码

        \`\`\`
        local str = "我的名字" or ""
        local Text_name = GUI:Text_Create(parent, "Text_name", 0, 0, 16, "#ffffff", str)
        \`\`\`
        `
    },
    {
        "label": "Text_setString",
        "insertText": dedent`
        GUI:Text_setString(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型   | 注释 |
        | :----- | :--- | :----- | :--- |
        | widget | 是   | obj    | 对象 |
        | value  | 是   | string | 文本 |

        `
    },
    {
        "label": "Text_getString",
        "insertText": dedent`
        GUI:Text_getString(\${1:widget})
        `,
        "documentation": dedent`# 获取文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |

        `
    },
    {
        "label": "Text_setTextColor",
        "insertText": dedent`
        GUI:Text_setTextColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 对象            |
        | value  | 是   | string | 色值(“#000000”) |

        `
    },
    {
        "label": "Text_setFontSize",
        "insertText": dedent`
        GUI:Text_setFontSize(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置字体大小
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 对象     |
        | value  | 是   | int  | 字体大小 |

        `
    },
    {
        "label": "Text_setFontName",
        "insertText": dedent`
        GUI:Text_setFontName(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置字体路径
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型   | 注释                              |
        | :----- | :--- | :----- | :-------------------------------- |
        | widget | 是   | obj    | 对象                              |
        | value  | 是   | string | 字体文件路径 例: “fonts/font.ttf” |

        `
    },
    {
        "label": "Text_enableOutline",
        "insertText": dedent`
        GUI:Text_enableOutline(\${1:widget}, \${2:color}, \${3:size})
        `,
        "documentation": dedent`# 设置字体描边
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 对象            |
        | color  | 是   | string | 色值(“#000000”) |
        | size   | 是   | int    | 描边宽度        |

        `
    },
    {
        "label": "Text_enableUnderline",
        "insertText": dedent`
        GUI:Text_enableUnderline(\${1:widget})
        `,
        "documentation": dedent`# 设置是否启用下划线
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 文本对象 |

        `
    },
    {
        "label": "Text_setMaxLineWidth",
        "insertText": dedent`
        GUI:Text_setMaxLineWidth(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本最大行宽
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |
        | value  | 是   | int  | 宽度 |

        \`\`\`
        -- 需要在设置文本最大行宽后再填充文本内容
        local Text_name = GUI:Text_Create(parent, "Text_name", 0,0, 16, "#ffffff", "")
        GUI:Text_setMaxLineWidth(Text_name, 100)
        GUI:Text_setString(Text_name, "设置文本最大行宽这是一段神奇的文字")
        \`\`\`
        `
    },
    {
        "label": "Text_disableEffect",
        "insertText": dedent`
        GUI:Text_disableEffect(\${1:widget}, \${2:param})
        `,
        "documentation": dedent`# 禁用文本特效
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释                                       |
        | :----- | :--- | :--- | :----------------------------------------- |
        | widget | 是   | obj  | 对象                                       |
        | value  | 是   | int  | 特效类型： 0：正常 1：描边 2：阴影 3：发光 |

        `
    },
    {
        "label": "Text_disableNormal",
        "insertText": dedent`
        GUI:Text_disableNormal(\${1:widget})
        `,
        "documentation": dedent`# 禁用文本特效（正常）
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |

        `
    },
    {
        "label": "Text_disableOutLine",
        "insertText": dedent`
        GUI:Text_disableOutLine(\${1:widget})
        `,
        "documentation": dedent`# 禁用文本特效（描边）
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |

        `
    },
    {
        "label": "Text_disableShadow",
        "insertText": dedent`
        GUI:Text_disableShadow(\${1:widget})
        `,
        "documentation": dedent`# 禁用文本特效（阴影）
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |

        `
    },
    {
        "label": "Text_disableGlow",
        "insertText": dedent`
        GUI:Text_disableGlow(\${1:widget})
        `,
        "documentation": dedent`# 禁用文本特效（发光）
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释 |
        | :----- | :--- | :--- | :--- |
        | widget | 是   | obj  | 对象 |

        `
    },
    {
        "label": "Text_setTextVerticalAlignment",
        "insertText": dedent`
        GUI:Text_setTextVerticalAlignment(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本垂直对齐
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释                            |
        | :----- | :--- | :--- | :------------------------------ |
        | widget | 是   | obj  | 对象                            |
        | value  | 是   | int  | 0：顶对齐 1：垂直居中 2：底对齐 |

        `
    },
    {
        "label": "Text_setTextHorizontalAlignment",
        "insertText": dedent`
        GUI:Text_setTextHorizontalAlignment(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本水平对齐
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型 | 注释                            |
        | :----- | :--- | :--- | :------------------------------ |
        | widget | 是   | obj  | 对象                            |
        | value  | 是   | int  | 0：顶对齐 1：水平居中 2：底对齐 |

        `
    },
    {
        "label": "Text_setTextAreaSize",
        "insertText": dedent`
        GUI:Text_setTextAreaSize(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置文本尺寸
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数   | 必选 | 类型  | 注释                    |
        | :----- | :--- | :---- | :---------------------- |
        | widget | 是   | obj   | 对象                    |
        | value  | 是   | table | {width = 0, height = 0} |

        `
    },
    {
        "label": "Text_COUNTDOWN",
        "insertText": dedent`
        GUI:Text_COUNTDOWN(\${1:widget}, \${2:time}, \${3:callback})
        `,
        "documentation": dedent`# 设置倒计时文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2165)

        | 参数     | 必选 | 类型     | 注释                                                         |
        | :------- | :--- | :------- | :----------------------------------------------------------- |
        | widget   | 是   | obj      | 对象                                                         |
        | time     | 是   | int      | 倒计时时间, 单位:秒                                          |
        | callback | 否   | function | 每秒触发回调, 传入参数: 剩余时间 **版本号[3.40.4]及以后改为倒计时结束触发** |
        | showType | 否   | int      | 倒计时时间显示方式 0: xx时xx分xx秒 1: 小于1天显示xx:xx:xx 大于显示xx天xx时xx分 [3.40.8版本新增] |

        `
    },
]




export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    textItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
